package com.stt.order.design.strategy.impl;

import com.stt.order.design.strategy.PromotionStrategy;
import com.stt.order.model.Order;
import java.math.BigDecimal;
import java.util.Map;

/**
 * 用户类型优惠策略实现类
 * 根据用户类型（VIP、企业用户等）计算不同的折扣
 */
public class UserTypePromotionStrategy implements PromotionStrategy {
    /**
     * 定义不同用户类型对应的折扣率
     * VIP用户8折
     * 企业用户7折
     * 普通用户不打折
     */
    private static final Map<String, BigDecimal> DISCOUNT_RATES = Map.of(
        "VIP", new BigDecimal("0.8"),
        "ENTERPRISE", new BigDecimal("0.7"),
        "NORMAL", BigDecimal.ONE
    );

    @Override
    public BigDecimal apply(Order order, BigDecimal amount) {
        // 根据用户类型获取对应折扣率，如果用户类型不存在则返回原价
        return amount.multiply(DISCOUNT_RATES.getOrDefault(order.getUserType(), BigDecimal.ONE));
    }

    @Override
    public String getType() {
        return "USER_TYPE";
    }
} 